package com.miracle.system.base.domain;

import com.github.pagehelper.PageInfo;
import com.miracle.common.utils.StringUtils;
import org.apache.poi.ss.formula.functions.T;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;

/**
 * @author ：miracle.cui
 * @description：操作消息提醒
 * @date ：2020/7/30 16:23
 */
public class ResultMap  extends HashMap<String, Object> {

    /** 状态码 */
    public static final String CODE_TAG = "code";

    /** 返回内容 */
    public static final String MSG_TAG = "msg";

    /** 数据对象 */
    public static final String DATA_TAG = "data";

    /** 数据总数 */
    public static final String TOTAL_TAG = "total";

    /** 数据对象 */
    public static final String ROWS_TAG = "rows";

    /**
     * 初始化一个新创建的 ResultMap 对象，使其表示一个空消息。
     */
    public ResultMap()
    {
    }

    /**
     * 初始化一个新创建的 ResultMap 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     */
    public ResultMap(int code, String msg)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
    }

    /**
     * 初始化一个新创建的 ResultMap 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     * @param data 数据对象
     */
    public ResultMap(int code, String msg, Object data)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
        if (StringUtils.isNotNull(data))
        {
            super.put(DATA_TAG, data);
        }
    }

    /**
     * 初始化一个新创建的 ResultMap 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     * @param list 数据对象
     */
    public ResultMap(int code, String msg, List<?> list)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
        if (StringUtils.isNotNull(list)){
            super.put(ROWS_TAG, list);
            super.put(TOTAL_TAG, new PageInfo(list).getTotal());
        }
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static ResultMap success()
    {
        return ResultMap.success("操作成功");
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static ResultMap success(Object data)
    {
        return ResultMap.success("操作成功", data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static ResultMap success(String msg)
    {
        return ResultMap.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static ResultMap success(String msg, Object data)
    {
        return new ResultMap(HttpServletResponse.SC_OK, msg, data);
    }



    public static ResultMap getPage(List<?> list)
    {
        return ResultMap.getPage("操作成功",list);
    }
    public static ResultMap getPage(String msg, List<?> list)
    {
        return ResultMap.getPage(200, msg,list);
    }
    public static ResultMap getPage(int code, String msg, List<?> list)
    {
        return new ResultMap(code, msg,list);
    }


    /**
     * 返回错误消息
     *
     * @return
     */
    public static ResultMap error()
    {
        return ResultMap.error("操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ResultMap error(String msg)
    {
        return ResultMap.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static ResultMap error(String msg, Object data)
    {
        return new ResultMap(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg 返回内容
     * @return 警告消息
     */
    public static ResultMap error(int code, String msg)
    {
        return new ResultMap(code, msg, null);
    }
}
